Econometría II: ARCH

Departamento de Economía

Carlos A. Yanes G.

2023-10-23

Paquetes con que se trabaja la sesión

Los paquetes que vamos a utilizar en la sesión de hoy son:

Note

Para trabajar en esta ocasión vamos a usar los paquetes de :

library(pacman)
p_load(readxl, TSstudio, tidyverse, stats, urca, forecast, ggfortify, ggplot2, tseries, fpp2, dynlm, broom))
  • Es importante resaltar el paquete dynlm, ya que con el estimaremos los modelos. Algo de lo que estará explicado aquí tiene mucho del libro (Colonescu 2016)

Preambulo

Modelo ARCH

Definición

Son modelos utilizados para modelar la media condicional de una serie y con esto su error. Son muy usados para pronostico de volatilidad o choque en el tiempo de la variable observada.

  • \[y_t=\phi+\varepsilon_{t}\]
  • \[\varepsilon_t=\rho_{t-1}+\nu_t\]
  • \[\nu_t \sim N(0, \sigma_t^2)\]

Contexto de los modelos

  • Con la heterocedasticidad los estimadores siguen siendo lineales e insesgados pero ya no con mínima varianza. \[Var(\epsilon_{t}|X)=\sigma^{2}_{i}; \ con \quad i=1,2,...,n\]
  • Suponga que tiene un modelo AR, de tal forma: \[Y_{t}= \phi Y_{t-1}+\epsilon_{t}, \quad |\phi| < 1\]
  • Se encuentra que su valor esperado (esperanza) y su varianza será: \[E(Y)=0 \quad Var= \frac{\sigma^{2}_{\epsilon}}{(1-\phi^{2})}\]

Contexto de los modelos

Un modelo ARCH es:

  • La forma matemática de \[Y_{t}= \phi Y_{t-1}+\epsilon_{t}, \quad |\phi| < 1\]
  • Si su varianza es: \[Var_{t-1}\epsilon_{t}=h^{2}_{t}= \alpha_{0}+\alpha_{1}\epsilon^{2}_{t-1}\]
  • Lo anterior puede ser reescrito como: \[h^{2}_{t}-\sigma^{2}= \alpha_{1}(\epsilon^{2}_{t-1}-\sigma^{2})\]

Datos

Cartera comercial de bancos (pero en crecimiento)

Datos a trabajar

Code
bd <- read_excel("cartera.xlsx")
bd <- bd |> select(Cartera)
bd <- bd |> mutate(rt = log(Cartera) - lag(log(Cartera)))
rcartera <- ts(bd$rt, frequency=12, start=c(2016,1))
rcartera
               Jan           Feb           Mar           Apr           May
2016            NA  0.0113423689 -0.0013808805  0.0054645843  0.0143072650
2017 -0.0099579117  0.0089734207  0.0040926323  0.0058287453  0.0067132948
2018 -0.0072869842  0.0046124227  0.0061942167  0.0039261808  0.0064224874
2019 -0.0089685136  0.0104725121  0.0084737600  0.0067576124  0.0103946742
2020 -0.0005332223  0.0128567617  0.0371648642  0.0062921845  0.0021920525
2021 -0.0039580020  0.0095716298  0.0057939311  0.0072935399  0.0083746472
2022  0.0011631814  0.0194560368  0.0150328918  0.0178367773  0.0158412595
2023 -0.0051473815  0.0060605071 -0.0021072533  0.0041548530              
               Jun           Jul           Aug           Sep           Oct
2016  0.0061300410  0.0078190948  0.0042191543  0.0036608353  0.0038919141
2017  0.0092028116 -0.0005228006  0.0017695858  0.0071302856  0.0039400221
2018  0.0045049675 -0.0016141501  0.0022366549  0.0048404436  0.0122001040
2019  0.0049023235  0.0055053505  0.0096920951  0.0118865748  0.0041901234
2020  0.0014928139 -0.0069810976 -0.0105203468 -0.0033904572 -0.0029508486
2021  0.0096960714  0.0089965025  0.0110344494  0.0126487841  0.0101998133
2022  0.0189272008  0.0124375975  0.0127221986  0.0133045232  0.0124867977
2023                                                                      
               Nov           Dec
2016  0.0103610892  0.0023106913
2017  0.0057527192  0.0055471143
2018  0.0128743676  0.0080044644
2019  0.0128023460  0.0003695568
2020 -0.0009316101 -0.0035530803
2021  0.0185225006  0.0111566507
2022  0.0098966031  0.0094549866
2023                            
Code
par(mfrow = c(1, 2))
plot.ts(rcartera)
hist(rcartera, main="", breaks=20, freq=FALSE, col="grey")

Modelo

Modelo

Code
tcartera.prom <- dynlm(rcartera~1)
summary(tcartera.prom )

Time series regression with "ts" data:
Start = 2016(2), End = 2023(4)

Call:
dynlm(formula = rcartera ~ 1)

Residuals:
       Min         1Q     Median         3Q        Max 
-0.0168649 -0.0040709 -0.0001504  0.0040890  0.0308203 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.0063446  0.0007871   8.061 3.98e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.007341 on 86 degrees of freedom
  (1 observation deleted due to missingness)

Modelo

  • A continuación lo que requerimos es tener el comportamiento del residuo
  • Las noticias son las que alimentan la volatilidad de la serie.
  • Una vez estimado el modelo en media (solo con constante), procedemos aplicar el Test de Lagrange \[(T-q)R^2 \sim \chi^2_{(1-\alpha, q)}\] Siendo \(H_0:\gamma_i=\gamma_j=0\).
  • El cual contrasta a: \[H_a: \gamma_1\neq\gamma_2\neq0\]
  • Al estimar vamos a tener la siguiente ecuación \[\varepsilon_t^2=\gamma_0+\gamma_1\varepsilon_{t-1}^2\]

Modelo de error

Code
errorsq <- ts(resid(tcartera.prom)^2)
tcar.ARCH <- dynlm(errorsq~L(errorsq))
summary(tcar.ARCH)

Time series regression with "ts" data:
Start = 2, End = 87

Call:
dynlm(formula = errorsq ~ L(errorsq))

Residuals:
       Min         1Q     Median         3Q        Max 
-5.573e-05 -4.926e-05 -3.703e-05 -1.830e-06  8.963e-04 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.347e-05  1.386e-05   3.859 0.000222 ***
L(errorsq)  2.380e-03  1.092e-01   0.022 0.982658    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.0001164 on 84 degrees of freedom
Multiple R-squared:  5.658e-06, Adjusted R-squared:  -0.0119 
F-statistic: 0.0004753 on 1 and 84 DF,  p-value: 0.9827

Modelo

Estamos al punto de aplicar entonces el Test de Lagrange

Code
T <- nobs(tcartera.prom)
q <- length(coef(tcar.ARCH))-1
Rsq <- glance(tcar.ARCH)[[1]]
LM <- (T-q)*Rsq
alpha <- 0.05
Chicr <- qchisq(1-alpha, q)

Lo cual nos arroja un valor de 4.8660175^{-4} < 3.8415, que es prácticamente cero -Note la notación científica-. En este caso nuestra serie no tiene efectos autoregresivos o ARCH.

Para decir que nuestra serie posee efectos ARCH este valor o test de Lagrange debe ser siempre mayor al estadístico crítico de la distribución \(\chi^2\).

Una forma automática del Test

Code
library(FinTS)
carteraArchTest <- ArchTest(rcartera, lags=1, demean=TRUE)
carteraArchTest

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  rcartera
Chi-squared = 0.0004866, df = 1, p-value = 0.9824

Graficando volatilidad

Code
hhat <- ts(2*tcar.ARCH$fitted.values^2)
plot.ts(hhat)

Gracias por su atención!!

Referencias

Colonescu, Constantin. 2016. Principles of Econometrics. Boston.